<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE topic
  PUBLIC "-//OASIS//DTD DITA Composite//EN" "ditabase.dtd">
<topic id="topic1" xml:lang="en">
  <title id="ik110126">Summary of Greenplum Features</title>
  <body>
    <p>This section provides a high-level overview of the system requirements and feature set of
      Greenplum Database. It contains the following topics:</p>
    <ul>
      <li id="ik143345"><xref href="#topic2" type="topic" format="dita"/></li>
      <li id="ik143353"><xref href="#topic8" type="topic" format="dita"/></li>
    </ul>
  </body>
  <topic id="topic2" xml:lang="en">
    <title id="ik215318">Greenplum SQL Standard Conformance</title>
    <body>
      <p>The SQL language was first formally standardized in 1986 by the American National Standards
        Institute (ANSI) as SQL 1986. Subsequent versions of the SQL standard have been released by
        ANSI and as International Organization for Standardization (ISO) standards: SQL 1989, SQL
        1992, SQL 1999, SQL 2003, SQL 2006, and finally SQL 2008, which is the current SQL standard.
        The official name of the standard is ISO/IEC 9075-14:2008. In general, each new version adds
        more features, although occasionally features are deprecated or removed.</p>
      <p>It is important to note that there are no commercial database systems that are fully
        compliant with the SQL standard. Greenplum Database is almost fully compliant with the SQL
        1992 standard, with most of the features from SQL 1999. Several features from SQL 2003 have
        also been implemented (most notably the SQL OLAP features). </p>
      <p>This section addresses the important conformance issues of Greenplum Database as they
        relate to the SQL standards. For a feature-by-feature list of Greenplum's support of the
        latest SQL standard, see <xref href="SQL2008_support.xml#topic1" type="topic" format="dita"
        />.</p>
    </body>
    <topic id="topic3" xml:lang="en">
      <title>Core SQL Conformance</title>
      <body>
        <p>In the process of building a parallel, shared-nothing database system and query
          optimizer, certain common SQL constructs are not currently implemented in Greenplum
          Database. The following SQL constructs are not supported:</p>
        <ol>
          <li id="ik264434">Some set returning subqueries in <codeph>EXISTS</codeph> or <codeph>NOT
              EXISTS</codeph> clauses that Greenplum's parallel optimizer cannot rewrite into
            joins.</li>
          <li id="ik264484">Backwards scrolling cursors, including the use of <codeph>FETCH
              PRIOR</codeph>, <codeph>FETCH FIRST</codeph>, <codeph>FETCH ABSOLUTE</codeph>, and
              <codeph>FETCH RELATIVE</codeph>.</li>
          <li id="ik264507">In <codeph>CREATE TABLE</codeph> statements (on hash-distributed
            tables): a <codeph>UNIQUE</codeph> or <codeph>PRIMARY KEY</codeph> clause must include
            all of (or a superset of) the distribution key columns. Because of this restriction,
            only one <codeph>UNIQUE</codeph> clause or <codeph>PRIMARY KEY</codeph> clause is
            allowed in a <codeph>CREATE TABLE</codeph> statement. <codeph>UNIQUE</codeph> or
              <codeph>PRIMARY KEY</codeph> clauses are not allowed on randomly-distributed
            tables.</li>
          <li id="ik264567"><codeph>CREATE UNIQUE INDEX</codeph> statements that do not contain all
            of (or a superset of) the distribution key columns. <codeph>CREATE UNIQUE INDEX</codeph>
            is not allowed on randomly-distributed tables. <p>Note that <codeph>UNIQUE
                INDEXES</codeph> (but not <codeph>UNIQUE CONSTRAINTS</codeph>) are enforced on a
              part basis within a partitioned table. They guarantee the uniqueness of the key within
              each part or sub-part.</p></li>
          <li id="ik264592"><codeph>VOLATILE</codeph> or <codeph>STABLE</codeph> functions cannot
           run on the segments, and so are generally limited to being passed literal values as
            the arguments to their parameters.</li>
          <li id="ik264601">Triggers are not supported since they typically rely on the use of
              <codeph>VOLATILE</codeph> functions.</li>
          <li id="ik264621">Referential integrity constraints (foreign keys) are not enforced in
            Greenplum Database. Users can declare foreign keys and this information is kept in the
            system catalog, however.</li>
          <li id="ik264690">Sequence manipulation functions <codeph>CURRVAL</codeph> and
              <codeph>LASTVAL</codeph>.</li>
        </ol>
      </body>
    </topic>
    <topic id="topic4" xml:lang="en">
      <title>SQL 1992 Conformance</title>
      <body>
        <p>The following features of SQL 1992 are not supported in Greenplum Database:</p>
        <ol>
          <li id="ik264838"><codeph>NATIONAL CHARACTER</codeph> (<codeph>NCHAR</codeph>) and
              <codeph>NATIONAL CHARACTER VARYING</codeph> (<codeph>NVARCHAR</codeph>). Users can
            declare the <codeph>NCHAR</codeph> and <codeph>NVARCHAR</codeph> types, however they are
            just synonyms for <codeph>CHAR</codeph> and <codeph>VARCHAR</codeph> in Greenplum
            Database.</li>
          <li id="ik264839"><codeph>CREATE ASSERTION</codeph> statement.</li>
          <li id="ik264840"><codeph>INTERVAL</codeph> literals are supported in Greenplum Database,
            but do not conform to the standard.</li>
          <li id="ik264841"><codeph>GET DIAGNOSTICS</codeph> statement.</li>
          <li id="ik264843"><codeph>GLOBAL TEMPORARY TABLE</codeph>s and <codeph>LOCAL TEMPORARY
              TABLE</codeph>s. Greenplum <codeph>TEMPORARY TABLE</codeph>s do not conform to the SQL
            standard, but many commercial database systems have implemented temporary tables in the
            same way. Greenplum temporary tables are the same as <codeph>VOLATILE TABLE</codeph>s in
            Teradata.</li>
          <li id="ik264844"><codeph>UNIQUE</codeph> predicate.</li>
          <li id="ik264845"><codeph>MATCH PARTIAL</codeph> for referential integrity checks (most
            likely will not be implemented in Greenplum Database).</li>
        </ol>
      </body>
    </topic>
    <topic id="topic5" xml:lang="en">
      <title>SQL 1999 Conformance</title>
      <body>
        <p>The following features of SQL 1999 are not supported in Greenplum Database:</p>
        <ol>
          <li id="ik265010">Large Object data types: <codeph>BLOB</codeph>, <codeph>CLOB</codeph>,
              <codeph>NCLOB</codeph>. However, the <codeph>BYTEA</codeph> and <codeph>TEXT</codeph>
            columns can store very large amounts of data in Greenplum Database (hundreds of
            megabytes).</li>
          <li id="ik265012"><codeph>MODULE</codeph> (SQL client modules).</li>
          <li id="ik265013"><codeph>CREATE PROCEDURE</codeph> (<codeph>SQL/PSM</codeph>). This can
            be worked around in Greenplum Database by creating a <codeph>FUNCTION</codeph> that
            returns <codeph>void</codeph>, and invoking the function as
            follows:<codeblock>SELECT <i>myfunc</i>(<i>args</i>);
</codeblock></li>
          <li id="ik265014">The PostgreSQL/Greenplum function definition language
              (<codeph>PL/PGSQL</codeph>) is a subset of Oracle's <codeph>PL/SQL</codeph>, rather
            than being compatible with the <codeph>SQL/PSM</codeph> function definition language.
            Greenplum Database also supports function definitions written in Python, Perl, Java, and
            R.</li>
          <li id="ik265110"><codeph>BIT</codeph> and <codeph>BIT VARYING</codeph> data types
            (intentionally omitted). These were deprecated in SQL 2003, and replaced in SQL
            2008.</li>
          <li id="ik265123">Greenplum supports identifiers up to 63 characters long. The SQL
            standard requires support for identifiers up to 128 characters long. </li>
          <li id="ik265143">Prepared transactions (<codeph>PREPARE TRANSACTION</codeph>,
              <codeph>COMMIT PREPARED</codeph>, <codeph>ROLLBACK PREPARED</codeph>). This also means
            Greenplum does not support <codeph>XA</codeph> Transactions (2 phase commit coordination
            of database transactions with external transactions).</li>
          <li id="ik265148"><codeph>CHARACTER SET</codeph> option on the definition of
              <codeph>CHAR()</codeph> or <codeph>VARCHAR()</codeph> columns. </li>
          <li id="ik265159">Specification of <codeph>CHARACTERS</codeph> or <codeph>OCTETS</codeph>
              (<codeph>BYTES</codeph>) on the length of a <codeph>CHAR()</codeph> or
              <codeph>VARCHAR()</codeph> column. For example, <codeph>VARCHAR(15
              CHARACTERS)</codeph> or <codeph>VARCHAR(15 OCTETS)</codeph> or <codeph>VARCHAR(15
              BYTES)</codeph>.</li>
          <li id="ik265021"><codeph>CREATE DISTINCT TYPE </codeph>statement. <codeph>CREATE
              DOMAIN</codeph> can be used as a work-around in Greenplum.</li>
          <li id="ik265210">The <i>explicit table</i> construct.</li>
        </ol>
      </body>
    </topic>
    <topic id="topic6" xml:lang="en">
      <title>SQL 2003 Conformance</title>
      <body>
        <p>The following features of SQL 2003 are not supported in Greenplum Database:</p>
        <ol>
          <li id="ik268864"><codeph>MERGE</codeph> statements.</li>
          <li id="ik265705"><codeph>IDENTITY</codeph> columns and the associated <codeph>GENERATED
              ALWAYS/GENERATED BY DEFAULT</codeph> clause. The <codeph>SERIAL</codeph> or
              <codeph>BIGSERIAL</codeph> data types are very similar to <codeph>INT</codeph> or
              <codeph>BIGINT GENERATED BY DEFAULT AS IDENTITY</codeph>.</li>
          <li id="ik265706"><codeph>MULTISET</codeph> modifiers on data types.</li>
          <li id="ik265707"><codeph>ROW</codeph> data type.</li>
          <li id="ik265708">Greenplum Database syntax for using sequences is non-standard. For
            example, <codeph>nextval('</codeph><codeph>seq</codeph><codeph>')</codeph> is used in
            Greenplum instead of the standard <codeph>NEXT VALUE FOR
            </codeph><codeph>seq</codeph>.</li>
          <li id="ik265709"><codeph>GENERATED ALWAYS AS </codeph>columns. Views can be used as a
            work-around.</li>
          <li id="ik265710">The sample clause (<codeph>TABLESAMPLE</codeph>) on
              <codeph>SELECT</codeph> statements. The <codeph>random()</codeph> function can be used
            as a work-around to get random samples from tables.</li>
          <li id="ik265712">The <i>partitioned join tables</i> construct (<codeph>PARTITION
              BY</codeph> in a join).</li>
          <li id="ik265715">Greenplum array data types are almost SQL standard compliant with some
            exceptions. Generally customers should not encounter any problems using them.</li>
        </ol>
      </body>
    </topic>
    <topic id="topic7" xml:lang="en">
      <title>SQL 2008 Conformance</title>
      <body>
        <p>The following features of SQL 2008 are not supported in Greenplum Database:</p>
        <ol>
          <li id="ik265320"><codeph>BINARY</codeph> and <codeph>VARBINARY</codeph> data types.
              <codeph>BYTEA</codeph> can be used in place of <codeph>VARBINARY</codeph> in Greenplum
            Database.</li>
          <li id="ik265322">The <codeph>ORDER BY</codeph> clause is ignored in views and subqueries
            unless a <codeph>LIMIT</codeph> clause is also used. This is intentional, as the
            Greenplum optimizer cannot determine when it is safe to avoid the sort, causing an
            unexpected performance impact for such <codeph>ORDER BY</codeph> clauses. To work
            around, you can specify a really large <codeph>LIMIT</codeph>. For example:
            <codeblock>SELECT * FROM mytable ORDER BY 1 LIMIT 9999999999</codeblock></li>
          <li id="ik265583">The <i>row subquery</i> construct is not supported.</li>
          <li id="ik265586"><codeph>TRUNCATE TABLE</codeph> does not accept the <codeph>CONTINUE
              IDENTITY</codeph> and <codeph>RESTART IDENTITY</codeph> clauses.</li>
        </ol>
      </body>
    </topic>
  </topic>
  <topic id="topic8" xml:lang="en">
    <title id="ik264019">Greenplum and PostgreSQL Compatibility</title>
    <body>
      <p>Greenplum Database is based on PostgreSQL 9.4. To support the distributed nature and
        typical workload of a Greenplum Database system, some SQL commands have been added or
        modified, and there are a few PostgreSQL features that are not supported. Greenplum has also
        added features not found in PostgreSQL, such as physical data distribution, parallel query
        optimization, external tables, resource queues, and enhanced table partitioning. For full
        SQL syntax and references, see the <xref href="sql_commands/sql_ref.xml#topic1" type="topic"
          format="dita"/>.<note>Greenplum Database does not support the PostgreSQL <xref
            href="https://www.postgresql.org/docs/9.4/largeobjects.html" format="html"
            scope="external">large object facility</xref> for streaming user data that is stored in
          large-object structures.</note><note otherprops="pivotal">VMware does not support using
            <codeph>WITH OIDS</codeph> or <codeph>oids=TRUE</codeph> to assign an OID system column
          when creating or altering a table.  This syntax is deprecated and will be removed in a
          future Greenplum release.</note></p>
      <table id="ik213423">
        <title>SQL Support in Greenplum Database</title>
        <tgroup cols="3">
          <colspec colnum="1" colname="col1" colwidth="143pt"/>
          <colspec colnum="2" colname="col2" colwidth="73pt"/>
          <colspec colnum="3" colname="col3" colwidth="233pt"/>
          <thead>
            <row>
              <entry colname="col1">SQL Command</entry>
              <entry colname="col2">Supported in Greenplum</entry>
              <entry colname="col3">Modifications, Limitations, Exceptions</entry>
            </row>
          </thead>
          <tbody>
            <row>
              <entry colname="col1"><codeph>ALTER AGGREGATE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER CONVERSION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER DATABASE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER DOMAIN</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER EXTENSION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Changes the definition of a Greenplum Database extension - based
                on PostgreSQL 9.6. </entry>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER FUNCTION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER GROUP</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">An alias for <xref href="sql_commands/ALTER_ROLE.xml#topic1"
                  type="topic" format="dita"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER INDEX</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER LANGUAGE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER OPERATOR</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER OPERATOR CLASS</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER OPERATOR FAMILY</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER PROTOCOL</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER RESOURCE QUEUE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Greenplum Database resource management feature - not in
                PostgreSQL.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER ROLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Greenplum Database Clauses:</b><p><codeph>RESOURCE QUEUE
                    </codeph><i>queue_name</i><codeph> | none</codeph></p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER SCHEMA</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER SEQUENCE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry><codeph>ALTER SYSTEM</codeph></entry>
              <entry><b>NO</b></entry>
              <entry/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER TABLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Unsupported Clauses / Options:</b><p><codeph>CLUSTER
                    ON</codeph></p><p><codeph>ENABLE/DISABLE TRIGGER</codeph></p><p><b>Greenplum
                    Database Clauses:</b></p><p><codeph>ADD | DROP | RENAME | SPLIT | EXCHANGE
                    PARTITION | SET SUBPARTITION TEMPLATE | SET WITH
                    </codeph><codeph>(REORGANIZE=true | false) | SET DISTRIBUTED
                BY</codeph></p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER TABLESPACE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER TRIGGER</codeph></entry>
              <entry colname="col2"><b>NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER TYPE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Greenplum Database Clauses:</b><p><codeph>SET DEFAULT
                    ENCODING</codeph></p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER USER</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">An alias for <xref href="sql_commands/ALTER_ROLE.xml#topic1"
                  type="topic" format="dita"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>ALTER VIEW</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ANALYZE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>BEGIN</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CHECKPOINT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CLOSE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CLUSTER</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>COMMENT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>COMMIT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>COMMIT PREPARED</codeph></entry>
              <entry colname="col2"><b>NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>COPY</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Modified Clauses:</b><p><codeph>ESCAPE [ AS ]
                    '</codeph><i>escape</i><codeph>' | 'OFF'</codeph></p><p><b>Greenplum Database
                    Clauses:</b></p><p><codeph>[LOG ERRORS] SEGMENT REJECT LIMIT
                    </codeph><i>count</i><codeph> [ROWS|PERCENT]</codeph></p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE AGGREGATE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Unsupported Clauses / Options:</b><p><codeph>[ , SORTOP =
                    </codeph><i>sort_operator</i><codeph> ]</codeph></p><p><b>Greenplum Database
                    Clauses:</b></p><p><codeph>[ , COMBINEFUNC = </codeph><i>combinefunc</i><codeph>
                    ]</codeph></p><p><b>Limitations:</b></p><p>The functions used to implement the
                  aggregate must be <codeph>IMMUTABLE</codeph> functions.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE CAST</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE CONSTRAINT TRIGGER</codeph></entry>
              <entry colname="col2"><b>NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE CONVERSION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE DATABASE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE DOMAIN</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE EXTENSION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Loads a new extension into Greenplum Database - based on
                PostgreSQL 9.6.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE EXTERNAL TABLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Greenplum Database parallel ETL feature - not in PostgreSQL
                9.4.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE FUNCTION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Limitations:</b><p>Functions defined as
                    <codeph>STABLE</codeph> or <codeph>VOLATILE</codeph> can be run in
                  Greenplum Database provided that they are run on the master only.
                    <codeph>STABLE</codeph> and <codeph>VOLATILE</codeph> functions cannot be used
                  in statements that run at the segment level. </p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE GROUP</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">An alias for <xref href="sql_commands/CREATE_ROLE.xml#topic1"
                  type="topic" format="dita"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE INDEX</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Greenplum Database Clauses:</b><p><codeph>USING
                    bitmap</codeph> (bitmap
                    indexes)</p><p><b>Limitations:</b></p><p><codeph>UNIQUE</codeph> indexes are
                  allowed only if they contain all of (or a superset of) the Greenplum distribution
                  key columns. On partitioned tables, a unique index is only supported within an
                  individual partition - not across all
                    partitions.</p><p><codeph>CONCURRENTLY</codeph> keyword not supported in
                  Greenplum.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE LANGUAGE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry><codeph>CREATE MATERIALIZED VIEW</codeph></entry>
              <entry>YES</entry>
              <entry>Based on PostgreSQL 9.4.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE OPERATOR</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Limitations:</b><p>The function used to implement the
                  operator must be an <codeph>IMMUTABLE</codeph> function.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE OPERATOR CLASS</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE OPERATOR FAMILY</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE PROTOCOL</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE RESOURCE QUEUE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Greenplum Database resource management feature - not in
                PostgreSQL 9.4.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE ROLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Greenplum Database Clauses:</b><p><codeph>RESOURCE QUEUE
                    </codeph><i>queue_name</i><codeph> | none</codeph></p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE RULE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE SCHEMA</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE SEQUENCE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Limitations:</b><p>The <codeph>lastval()</codeph> and
                    <codeph>currval()</codeph> functions are not supported.</p><p>The
                    <codeph>setval()</codeph> function is only allowed in queries that do not
                  operate on distributed data.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE TABLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Unsupported Clauses / Options:</b><p><codeph>[GLOBAL |
                    LOCAL]</codeph></p><p><codeph>REFERENCES</codeph></p><p><codeph>FOREIGN
                    KEY</codeph></p><p><codeph>[DEFERRABLE | NOT DEFERRABLE]
                    </codeph></p><p><b>Limited Clauses:</b></p><p><codeph>UNIQUE</codeph> or
                    <codeph>PRIMARY KEY </codeph>constraints are only allowed on hash-distributed
                  tables (<codeph>DISTRIBUTED BY</codeph>), and the constraint columns must be the
                  same as or a superset of the distribution key columns of the table and must
                  include all the distribution key columns of the partitioning
                    key.</p><p><b>Greenplum Database Clauses:</b></p><p><codeph>DISTRIBUTED BY
                      (<i>column</i>, [ ... ] ) |</codeph></p><p><codeph>DISTRIBUTED
                    RANDOMLY</codeph></p><p><codeph>PARTITION BY <i>type</i> (<i>column</i> [, ...])
                       ( <i>partition_specification</i>, [...] )</codeph></p><p><codeph>WITH
                    (appendoptimized=true      [,compresslevel=value,blocksize=value]
                )</codeph></p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE TABLE AS</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">See <xref href="sql_commands/CREATE_TABLE.xml#topic1"
                  type="topic" format="dita"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE TABLESPACE</codeph></entry>
              <entry colname="col2"><b otherprops="red">YES</b></entry>
              <entry colname="col3"><b>Greenplum Database Clauses:</b><p>Specify host file system
                  locations for specific segment instances.</p><p><codeph>WITH
                      (content<varname>ID_1</varname>='<varname>/path/to/dir1</varname>...)</codeph></p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE TRIGGER</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE TYPE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Greenplum Database Clauses:</b><p><codeph>COMPRESSTYPE |
                    COMPRESSLEVEL | BLOCKSIZE</codeph></p><p><b>Limitations:</b></p><p>The functions
                  used to implement a new base type must be <codeph>IMMUTABLE</codeph>
                  functions.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE USER</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">An alias for <xref href="sql_commands/CREATE_ROLE.xml#topic1"
                  type="topic" format="dita"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>CREATE VIEW</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DEALLOCATE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DECLARE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Unsupported Clauses /
                  Options:</b><p><codeph>SCROLL</codeph></p><p><codeph>FOR UPDATE [ OF column [,
                    ...] ]</codeph></p><p><b>Limitations:</b></p><p>Cursors cannot be
                  backward-scrolled. Forward scrolling is supported.</p><p>PL/pgSQL does not have
                  support for updatable cursors. </p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DELETE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DISCARD</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">
                <p><b>Limitation:</b>
                  <codeph>DISCARD ALL</codeph> is not supported.</p>
              </entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DO</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">PostgreSQL 9.0 feature</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP AGGREGATE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP CAST</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP CONVERSION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP DATABASE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP DOMAIN</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP EXTENSION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Removes an extension from Greenplum Database – based on
                PostgreSQL 9.6.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP EXTERNAL TABLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Greenplum Database parallel ETL feature - not in PostgreSQL
                9.4.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP FUNCTION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP GROUP</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">An alias for <xref href="sql_commands/DROP_ROLE.xml#topic1"
                /></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP INDEX</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP LANGUAGE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP OPERATOR</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP OPERATOR CLASS</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP OPERATOR FAMILY</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP OWNED</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP PROTOCOL</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP RESOURCE QUEUE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Greenplum Database resource management feature - not in
                PostgreSQL 9.4.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP ROLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP RULE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP SCHEMA</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP SEQUENCE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP TABLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP TABLESPACE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP TRIGGER</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP TYPE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP USER</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">An alias for <xref href="sql_commands/DROP_ROLE.xml#topic1"
                /></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>DROP VIEW</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>END</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>EXECUTE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>EXPLAIN</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>FETCH</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Unsupported Clauses /
                  Options:</b><p><codeph>LAST</codeph></p><p><codeph>PRIOR</codeph></p><p><codeph>BACKWARD</codeph></p><p><codeph>BACKWARD
                    ALL</codeph></p><p><b>Limitations:</b></p><p>Cannot fetch rows in a
                  nonsequential fashion; backward scan is not supported.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>GRANT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>INSERT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry><codeph>LATERAL</codeph> Join Type</entry>
              <entry><b>NO</b></entry>
              <entry/>
            </row>
            <row>
              <entry colname="col1"><codeph>LISTEN</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>LOAD</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>LOCK</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>MOVE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">See <xref href="sql_commands/FETCH.xml#topic1"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>NOTIFY</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>PREPARE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>PREPARE TRANSACTION</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>REASSIGN OWNED</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry><codeph>REFRESH MATERIALIZED VIEW</codeph></entry>
              <entry>YES</entry>
              <entry>Based on PostgreSQL 9.4.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>REINDEX</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>RELEASE SAVEPOINT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>RESET</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>RETRIEVE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Greenplum Database parallel retrieve cursor - not in PostgreSQL 9.4.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>REVOKE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ROLLBACK</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ROLLBACK PREPARED</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>ROLLBACK TO SAVEPOINT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>SAVEPOINT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>SELECT</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Limitations:</b><p>Limited use of <codeph>VOLATILE</codeph>
                  and <codeph>STABLE</codeph> functions in <codeph>FROM</codeph> or
                    <codeph>WHERE</codeph> clauses</p><p>Text search (<codeph>Tsearch2</codeph>) is
                  not supported</p><p><b>Greenplum Database Clauses (OLAP):</b></p><p><codeph>[GROUP
                    BY </codeph><i>grouping_element</i><codeph> [,
                    ...]]</codeph></p><p><codeph>[WINDOW </codeph><i>window_name</i><codeph> AS
                    (</codeph><i>window_specification</i><codeph>)]</codeph></p><p><codeph>[FILTER
                    (WHERE </codeph><i>condition</i><codeph>)]</codeph> applied to an aggregate
                  function in the <codeph>SELECT</codeph> list</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>SELECT INTO</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">See <xref href="sql_commands/SELECT.xml#topic1" type="topic"
                  format="dita"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>SET</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>SET CONSTRAINTS</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3">In PostgreSQL, this only applies to foreign key constraints,
                which are currently not enforced in Greenplum Database.</entry>
            </row>
            <row>
              <entry colname="col1"><codeph>SET ROLE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>SET SESSION AUTHORIZATION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3">Deprecated as of PostgreSQL 8.1 - see <xref
                  href="sql_commands/SET_ROLE.xml#topic1" type="topic" format="dita"/></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>SET TRANSACTION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Limitations:</b><p><codeph>DEFERRABLE</codeph> clause has no
                  effect.</p><p><codeph>SET TRANSACTION SNAPSHOT</codeph> command is not
                  supported.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>SHOW</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>START TRANSACTION</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>TRUNCATE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>UNLISTEN</codeph></entry>
              <entry colname="col2"><b otherprops="red">NO</b></entry>
              <entry colname="col3"/>
            </row>
            <row>
              <entry colname="col1"><codeph>UPDATE</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Limitations:</b><p><codeph>SET</codeph> not allowed for
                  Greenplum distribution key columns.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>VACUUM</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"><b>Limitations:</b><p><codeph>VACUUM FULL</codeph> is not
                  recommended in Greenplum Database.</p></entry>
            </row>
            <row>
              <entry colname="col1"><codeph>VALUES</codeph></entry>
              <entry colname="col2">YES</entry>
              <entry colname="col3"/>
            </row>
          </tbody>
        </tgroup>
      </table>
    </body>
  </topic>
</topic>
